{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "4dd365a3",
   "metadata": {},
   "source": [
    "| [03_data_science/06_SciPy曲线拟合.ipynb](https://github.com/shibing624/python-tutorial/blob/master/03_data_science/06_SciPy曲线拟合.ipynb)  | Scipy曲线  |[Open In Colab](https://colab.research.google.com/github/shibing624/python-tutorial/blob/master/03_data_science/06_SciPy曲线拟合.ipynb) |\n",
    "\n",
    "# SciPy曲线拟合"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "e40aa32a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 导入基础包：\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "# 多项式拟合\n",
    "from numpy import polyfit, poly1d\n",
    "\n",
    "# 产生数据：\n",
    "x = np.linspace(-5, 5, 100)\n",
    "y = 4 * x + 1.5\n",
    "noise_y = y + np.random.randn(y.shape[-1]) * 2.5\n",
    "\n",
    "p = plt.plot(x, noise_y, 'rx')\n",
    "p = plt.plot(x, y, 'b:')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1ad18af5",
   "metadata": {},
   "source": [
    "进行线性拟合，polyfit 是多项式拟合函数，线性拟合即一阶多项式："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "3864f3a7",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([3.95455496, 1.14016421])"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "coeff = polyfit(x, noise_y, 1)\n",
    "coeff"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "00ae4f16",
   "metadata": {},
   "source": [
    "一阶多项式 y=a1x+a0y=a1x+a0 拟合，返回两个系数 [a1,a0][a1,a0]。\n",
    "\n",
    "\n",
    "画出拟合曲线："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "abc0fde3",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "p = plt.plot(x, noise_y, 'rx')\n",
    "p = plt.plot(x, coeff[0] * x + coeff[1], 'k-')\n",
    "p = plt.plot(x, y, 'b--')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "01e443b4",
   "metadata": {},
   "source": [
    "### 多项式拟合余弦函数\n",
    "\n",
    "\n",
    "余弦函数："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "64bfc2f7",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "x = np.linspace(-np.pi, np.pi, 100)\n",
    "y = np.cos(x)\n",
    "\n",
    "# 用一阶到九阶多项式拟合，类似泰勒展开：\n",
    "# 可以用 poly1d 生成一个以传入的 coeff 为参数的多项式函数：\n",
    "y1 = poly1d(polyfit(x, y, 1))\n",
    "y3 = poly1d(polyfit(x, y, 3))\n",
    "y5 = poly1d(polyfit(x, y, 5))\n",
    "y7 = poly1d(polyfit(x, y, 7))\n",
    "y9 = poly1d(polyfit(x, y, 9))\n",
    "x = np.linspace(-3 * np.pi, 3 * np.pi, 100)\n",
    "\n",
    "p = plt.plot(x, np.cos(x), 'k')  # 黑色余弦\n",
    "p = plt.plot(x, y1(x))\n",
    "p = plt.plot(x, y3(x))\n",
    "p = plt.plot(x, y5(x))\n",
    "p = plt.plot(x, y7(x))\n",
    "p = plt.plot(x, y9(x))\n",
    "\n",
    "a = plt.axis([-3 * np.pi, 3 * np.pi, -1.25, 1.25])\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b0e84ca2",
   "metadata": {},
   "source": [
    "黑色为原始的图形，可以看到，随着多项式拟合的阶数的增加，\n",
    "曲线与拟合数据的吻合程度在逐渐增大。\n",
    "\n",
    "\n",
    "### 最小二乘拟合\n",
    "导入相关的模块："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "d9d765a6",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "from scipy.stats import linregress\n",
    "\n",
    "x = np.linspace(0, 5, 100)\n",
    "y = 0.5 * x + np.random.randn(x.shape[-1]) * 0.35\n",
    "\n",
    "plt.plot(x, y, 'x')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "17f2d3be",
   "metadata": {},
   "source": [
    "Scipy.linalg.lstsq 最小二乘解\n",
    "\n",
    "可以使用 scipy.linalg.lstsq 求最小二乘解。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "2bf167f2",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[0.05050505 1.        ]\n",
      " [0.1010101  1.        ]\n",
      " [0.15151515 1.        ]\n",
      " [0.2020202  1.        ]]\n",
      "[0.48056456 0.1129315 ] 10.677977058552019 2 [30.23732043  4.82146667]\n"
     ]
    }
   ],
   "source": [
    "X = np.hstack((x[:, np.newaxis], np.ones((x.shape[-1], 1))))\n",
    "print(X[1:5])\n",
    "\n",
    "# 求解：\n",
    "from scipy.linalg import lstsq\n",
    "C, resid, rank, s = lstsq(X, y)\n",
    "print(C, resid, rank, s)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "09b8cb3a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "sum squared residual = 10.678\n",
      "rank of the X matrix = 2\n",
      "singular values of X = [30.23732043  4.82146667]\n"
     ]
    }
   ],
   "source": [
    "# 画图：\n",
    "p = plt.plot(x, y, 'rx')\n",
    "p = plt.plot(x, C[0] * x + C[1], 'k--')\n",
    "plt.show()\n",
    "\n",
    "print(\"sum squared residual = {:.3f}\".format(resid))\n",
    "print(\"rank of the X matrix = {}\".format(rank))\n",
    "print(\"singular values of X = {}\".format(s))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "07a02f4c",
   "metadata": {},
   "source": [
    "\n",
    "### Scipy.stats.linregress 线性回归\n",
    "对于上面的问题，还可以使用线性回归进行求解："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "ef3ed8de",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "R-value = 0.906\n",
      "p-value (probability there is no correlation) = 1.985e-38\n",
      "Root mean squared error of the fit = 0.150\n"
     ]
    }
   ],
   "source": [
    "slope, intercept, r_value, p_value, stderr = linregress(x, y)\n",
    "p = plt.plot(x, y, 'rx')\n",
    "p = plt.plot(x, slope * x + intercept, 'k--')\n",
    "plt.show()\n",
    "\n",
    "print(\"R-value = {:.3f}\".format(r_value))\n",
    "print(\"p-value (probability there is no correlation) = {:.3e}\".format(p_value))\n",
    "print(\"Root mean squared error of the fit = {:.3f}\".format(np.sqrt(stderr)))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cdd9868c",
   "metadata": {},
   "source": [
    "可以看到，两者求解的结果是一致的，但是出发的角度是不同的。\n",
    "\n",
    "### 高级的拟合\n",
    "\n",
    "先定义这个非线性函数：y=ae^(−bsin(fx+ϕ))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "62bfa697",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "def function(x, a, b, f, phi):\n",
    "    \"\"\"a function of x with four parameters\"\"\"\n",
    "    result = a * np.exp(-b * np.sin(f * x + phi))\n",
    "    return result\n",
    "\n",
    "\n",
    "# 画出原始曲线：\n",
    "x = np.linspace(0, 2 * np.pi, 50)\n",
    "actual_parameters = [3, 2, 1.25, np.pi / 4]\n",
    "y = function(x, *actual_parameters)\n",
    "p = plt.plot(x, y)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "940e187b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 加入噪声：\n",
    "from scipy.stats import norm\n",
    "\n",
    "y_noisy = y + 0.8 * norm.rvs(size=len(x))\n",
    "p = plt.plot(x, y, 'k-')\n",
    "p = plt.plot(x, y_noisy, 'rx')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d75f9d5d",
   "metadata": {},
   "source": [
    "高级的做法：\n",
    "\n",
    "不需要定义误差函数，直接传入 function 作为参数："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "c8ae2dac",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([3.49361679, 1.84275016, 1.28922873, 0.6823318 ])"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from scipy.optimize import curve_fit\n",
    "\n",
    "p_est, err_est = curve_fit(function, x, y_noisy)\n",
    "p_est"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "afb11d16",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "p = plt.plot(x, y_noisy, \"rx\")\n",
    "p = plt.plot(x, function(x, *p_est), \"g--\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "d9953fee",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[3.49361679 1.84275016 1.28922873 0.6823318 ]\n",
      "[[ 0.11276683 -0.03200496  0.01190229 -0.03722662]\n",
      " [-0.03200496  0.00936836 -0.00321958  0.01007001]\n",
      " [ 0.01190229 -0.00321958  0.00178671 -0.00558783]\n",
      " [-0.03722662  0.01007001 -0.00558783  0.01770848]]\n",
      "normalized relative errors for each parameter\n",
      "   a\t    b\t    f\t    phi\n",
      "[0.09612037 0.05252491 0.03278666 0.19502711]\n"
     ]
    }
   ],
   "source": [
    "# 这里 curve_fit 第一个返回的是函数的参数，第二个返回值为各个参数的协方差矩阵：\n",
    "print(p_est)\n",
    "print(err_est)\n",
    "\n",
    "# 协方差矩阵的对角线为各个参数的方差：\n",
    "print(\"normalized relative errors for each parameter\")\n",
    "print(\"   a\\t    b\\t    f\\t    phi\")\n",
    "print(np.sqrt(err_est.diagonal()) / p_est)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f56e7352",
   "metadata": {},
   "source": [
    "本节完。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "7d83bad8",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.8"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}